home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Animacje, filmy i prezentacje / Modelowanie 3D / Wings 3D 0.98.35 / wings-0.98.35.exe / lib / noise.fs < prev    next >
Text File  |  2006-07-19  |  2KB  |  55 lines

  1. // 
  2. // noise.fs
  3. //
  4. //      Noise shader
  5. //
  6. // Copyright (c) 2006 Dan Gudmundsson
  7. //
  8. //  See the file "license.terms" for information on usage and redistribution
  9. //  of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  10. //
  11. //     $Id: noise.fs,v 1.4 2006/01/27 15:17:56 dgud Exp $
  12. //
  13.  
  14.  
  15. uniform sampler3D auv_noise;
  16.  
  17. // T = fun(P) -> T=1+1/(P)+1/(P*P)+1/(P*P*P*P),All=[1/T,1/(P*T),1/(P*P*T),1/(P*P*P*P*T)], {T,list_to_tuple(All), lists:sum(All)} end.
  18.  
  19. float auv_noise(float P, vec3 pos)
  20. {
  21.     float temp = P, total;
  22.     vec4 per = vec4(1.0,temp,temp*temp,temp*temp*temp*temp);
  23.     total = 1.0/dot(per, vec4(1.0));
  24.     per  *= total;
  25.     vec4 noise = texture3D(auv_noise, pos);
  26.     return dot(per,noise);
  27. }
  28.  
  29. varying vec2 w3d_uv;
  30. varying vec3 w3d_pos;
  31. uniform float persistance, blend, scale;
  32. uniform vec3 auv_bbpos3d[2];
  33. uniform vec4 color1, color2;
  34. uniform sampler2D auv_bg;
  35.  
  36. void main(void)
  37. {   
  38.     float noise;
  39.     vec4 fColor = vec4(1.0); 
  40.     vec3 ch_center = (auv_bbpos3d[1]-auv_bbpos3d[0]);
  41.     float ch_scale  = scale*1.41421/length(ch_center);
  42.     ch_center = (ch_center/2.0) + auv_bbpos3d[0];
  43.     noise = auv_noise(persistance,(ch_scale*(w3d_pos-ch_center))+0.5); // *0.159155
  44.     vec4 bg = texture2D(auv_bg, w3d_uv);
  45.     fColor = mix(color2, color1, noise);
  46.     float alpha = fColor.w;
  47.     if(blend > 0.5) alpha *= abs(noise*2.0-1.0);
  48.     // I make my own blending I want keep alpha to be max 
  49.     fColor = mix(bg,fColor,alpha);
  50.     fColor.w = max(alpha,bg.w);
  51.     // Return the calculated color
  52.     gl_FragColor = fColor;
  53.  
  54.